/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年6月20日
 * 项目： lms
 */
package com.rainhy.core.support.bean;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.ArrayUtils;

/**
 * 值
 * 
 * @author rain
 * @version [版本号, 2016年6月20日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class Values<T> {
    
    /** 值4~ */
    private Map<Integer, T> values;
    
    /** 值1 */
    private T value1;
    
    /** 值2 */
    private T value2;
    
    /** 值3 */
    private T value3;
    
    @SuppressWarnings("unchecked")
    public Values(T... ts) {
        if (ArrayUtils.isEmpty(ts)) {
            return;
        }
        int length = ts.length;
        switch (length) {
            case 1:
                this.value1 = ts[0];
                break;
            case 2:
                this.value1 = ts[0];
                this.value2 = ts[1];
                break;
            case 3:
                this.value1 = ts[0];
                this.value2 = ts[1];
                this.value3 = ts[2];
                break;
            default:
                values = new HashMap<>();
                for (int index = 3; index < length; index++) {
                    values.put(Integer.valueOf(index), ts[index]);
                }
                break;
        }
    }
    
    /** 值4~ */
    public T getValue(int index) {
        switch (index) {
            case 1:
                return getValue1();
            case 2:
                return getValue2();
            case 3:
                return getValue3();
            default:
                if (values == null) {
                    return null;
                }
                return values.get(Integer.valueOf(index));
        }
    }
    
    /** 值1 */
    public T getValue1() {
        return value1;
    }
    
    /** 值2 */
    public T getValue2() {
        return value2;
    }
    
    /** 值3 */
    public T getValue3() {
        return value3;
    }
    
    /** 值4~ */
    public void setValue(int index, T value) {
        switch (index) {
            case 1:
                setValue1(value);
                break;
            case 2:
                setValue2(value);
                break;
            case 3:
                setValue3(value);
                break;
            default:
                if (values == null) {
                    values = new HashMap<>();
                }
                values.put(Integer.valueOf(index), value);
                break;
        }
    }
    
    /** 值1 */
    public void setValue1(T value1) {
        this.value1 = value1;
    }
    
    /** 值2 */
    public void setValue2(T value2) {
        this.value2 = value2;
    }
    
    /** 值3 */
    public void setValue3(T value3) {
        this.value3 = value3;
    }
}
